home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / formats / iff / newiff.lzh / NewIFF / NewIFF.lzh / newiff / apps / RawtoILBM / RawtoILBM.c < prev   
C/C++ Source or Header  |  1992-05-18  |  4KB  |  171 lines

  1. /* RawtoILBM
  2.  * Converts raw file (from ILBMtoRaw) into an ILBM
  3.  * Requires linkage with several iffparse modiules - See Makefile
  4.  * 37.9 04/92
  5.  */ 
  6. #define INTUI_V36_NAMES_ONLY
  7.  
  8. #include "iffp/ilbmapp.h"
  9.  
  10. #include <intuition/intuitionbase.h>
  11. #include <workbench/workbench.h>
  12.  
  13. #ifdef LATTICE
  14. int CXBRK(void) { return(0); }  /* Disable Lattice CTRL/C handling */
  15. int chkabort(void) { return(0); }  /* really */
  16. #endif
  17.  
  18. char *vers = "$VER: RawtoILBM 37.9";
  19. char *Copyright = 
  20.   "RawtoILBM v37.9 - converts raw file to ILBM - Freely Redistributable";
  21. #define MINARGS 6
  22. char *usage = "Usage: RawtoILBM rawname ilbmname width height depth\n";
  23.  
  24. void bye(UBYTE *s,int e);
  25. void cleanup(void);
  26.  
  27. struct Library    *IntuitionBase = NULL;
  28. struct Library    *GfxBase = NULL;
  29. struct Library    *IFFParseBase = NULL;
  30.  
  31. struct ILBMInfo ilbm = {0};
  32.  
  33. /* Max color registers for this exmple */
  34. #define MAXAMCOLORREG 32
  35.  
  36. USHORT    colortable[MAXAMCOLORREG];
  37.  
  38. BOOL fromWB;
  39.  
  40.  
  41. void main(int argc, char **argv)
  42.     {
  43.     LONG    error = 0L, rawfile, rlen;
  44.     USHORT    width, height, depth, pwidth, pheight, pmode, extra;
  45.     ULONG     plsize;
  46.     char        *rawname,*ilbmname;
  47.     int     k;
  48.  
  49.     fromWB = (argc==0) ? TRUE : FALSE;
  50.  
  51.     if(!(IntuitionBase = OpenLibrary("intuition.library", 0)))
  52.       bye("Can't open intuition library.\n",RETURN_WARN);
  53.       
  54.     if(!(GfxBase = OpenLibrary("graphics.library",0)))
  55.       bye("Can't open graphics library.\n",RETURN_WARN);
  56.  
  57.     if(!(IFFParseBase = OpenLibrary("iffparse.library",0)))
  58.       bye("Can't open iffparse library.\n",RETURN_WARN);
  59.  
  60.     if(!(ilbm.ParseInfo.iff = AllocIFF()))
  61.       bye(IFFerr(IFFERR_NOMEM),RETURN_WARN);
  62.  
  63.     if(argc==MINARGS)                 /* Passed filenames via command line  */
  64.           {
  65.           rawname  = argv[1];
  66.           ilbmname = argv[2];
  67.     width  = atoi(argv[3]);
  68.     height = atoi(argv[4]);
  69.     depth  = atoi(argv[5]);
  70.  
  71.     /* Page width, height, and mode for saved ILBM */
  72.     pwidth  = width  < 320 ? 320 : width;
  73.     pheight = height < 200 ? 200 : height;
  74.     pmode    = pwidth >= 640  ? HIRES : 0L;
  75.     pmode  |= pheight >= 400 ? LACE  : 0L;
  76.  
  77.     plsize = RASSIZE(width,height);
  78.     }
  79.     else
  80.     {
  81.     printf("%s\n%s\n",Copyright,usage);
  82.     bye("\n",RETURN_OK);
  83.     }
  84.      
  85.  
  86.     if(!(rawfile = Open(rawname,MODE_OLDFILE)))
  87.     {
  88.     printf("Can't open raw file '%s'\n",rawname);
  89.     bye(" ",RETURN_WARN);
  90.     }
  91.  
  92.     /*
  93.      * Allocate Bitmap and planes
  94.      */
  95.      extra = depth > 8 ? depth - 8 : 0;
  96.      if(ilbm.brbitmap = AllocMem(sizeof(struct BitMap) + (extra<<2),
  97.                 MEMF_CLEAR))
  98.         {
  99.         InitBitMap(ilbm.brbitmap,depth,width,height);
  100.         for(k=0, error=0, rlen=1; k<depth && (!error) && (rlen >0); k++) 
  101.             {
  102.             if(!(ilbm.brbitmap->Planes[k] = AllocRaster(width,height)))
  103.             error = IFFERR_NOMEM;
  104.             if(! error)
  105.         {
  106.                 BltClear(ilbm.brbitmap->Planes[k], RASSIZE(width,height),0);
  107.         /* Read a plane */
  108.         rlen = Read(rawfile,ilbm.brbitmap->Planes[k],plsize);
  109.                 }
  110.         }
  111.  
  112.     /* get colortable */
  113.     if((!error)&&(rlen > 0))
  114.         rlen=Read(rawfile,colortable,(MIN(1<<depth,MAXAMCOLORREG)<<1));
  115.  
  116.         if((error)||(rlen<=0))
  117.             {
  118.         if(rlen <= 0)      printf("Error loading raw file - check dimensions\n");
  119.             else         printf("Error allocating planes\n");
  120.         }
  121.     else
  122.         {
  123.         error = saveilbm(&ilbm, ilbm.brbitmap, pmode,
  124.                 width,  height, pwidth, pheight,
  125.                 colortable, MIN(1<<depth,MAXAMCOLORREG), 4,    /* colors */ 
  126.         mskNone, 0,        /* masking. transColor */
  127.         NULL, NULL,        /* additional chunk lists */
  128.         ilbmname);
  129.         }
  130.  
  131.         for(k=0; k<depth; k++) 
  132.             {
  133.             if(ilbm.brbitmap->Planes[k])
  134.             FreeRaster(ilbm.brbitmap->Planes[k],width,height);
  135.         }
  136.     FreeMem(ilbm.brbitmap, sizeof(struct BitMap) + (extra << 2));
  137.     }
  138.  
  139.     Close(rawfile);
  140.  
  141.     if(error)
  142.     {
  143.     printf("%s\n",IFFerr(error));
  144.     bye(" ", RETURN_FAIL);
  145.     }
  146.     else bye("",RETURN_OK);
  147.     }
  148.  
  149.  
  150. void bye(UBYTE *s,int e)
  151.     {
  152.     if(s&&(*s)) printf("%s\n",s);
  153.     if ((fromWB)&&(*s))    /* Wait so user can read messages */
  154.         {
  155.         printf("\nPRESS RETURN TO EXIT\n");
  156.         while(getchar() != '\n');
  157.         }
  158.     cleanup();
  159.     exit(e);
  160.     }
  161.  
  162. void cleanup()
  163.     {
  164.     if(ilbm.ParseInfo.iff)    FreeIFF(ilbm.ParseInfo.iff);
  165.  
  166.     if(GfxBase)        CloseLibrary(GfxBase);
  167.     if(IntuitionBase)    CloseLibrary(IntuitionBase);
  168.     if(IFFParseBase)    CloseLibrary(IFFParseBase);
  169.     }
  170.  
  171.